#define _CRT_SECURE_NO_WARNINGS

//#include <stdio.h>
//#include <assert.h>
//
//char* my_strcat(char* dest, const char* src)
//{
//	assert(dest && src);
//
//	char* ret = dest;
//
//	while (*dest)
//	{
//		dest++;
//	}
//
//	while (*dest++ = *src++)
//	{
//		;
//	}
//
//	return ret;
//}
//
//int main()
//{
//	char arr[20] = "hello ";
//	char* p = "world";
//
//	printf("%s\n", my_strcat(arr, p));
//
//	return 0;
//}


//#include <stdio.h>
//#include <assert.h>
//
//char* my_strstr(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//
//	char* p2 = str2;
//	char* p1 = str1, * cur = str1;
//
//	while ()
//	{
//		p1 = cur;
//
//		if (*p1 == *p2)
//		{
//			p2++;
//			p1++;
//		}
//
//		if (*p2 == '\0')
//			return cur;
//
//		cur++;
//	}
//}
//
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "cd";
//
//	printf("%s\n", my_strstr(arr1, arr2));
//
//	return 0;
//}

//
//#include <stdio.h>
//#include <assert.h>
//
//int my_strlen(const char* str)
//{
//	assert(str);
//
//	int count = 0;
//
//	while (*str)
//	{
//		++count;
//		++str;
//	}
//
//	return count;
//}
//
//int main()
//{
//	char arr[] = "abcdef";
//
//	printf("%d\n", my_strlen(arr));
//
//	return 0;
//}

//
//#include <stdio.h>
//#include <assert.h>
//
//char* my_strcpy(char* dest, const char* scr)
//{
//	assert(dest && scr);
//
//	char* ret = dest;
//
//	while (*dest++ = *scr++)
//	{
//		;
//	}
//
//	return ret;
//}
//
//int main()
//{
//	char arr1[] = "xxxxxxxxxxxxx";
//	char* p = "hello world";
//
//	printf("%s\n", my_strcpy(arr1, p));
//
//	return 0;
//}

//
//#include <stdio.h>
//#include <assert.h>
//
//int my_strcmp(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//
//	while (*str1 == *str2)
//	{
//		str1++;
//		str2++;
//	}
//
//	if (*str1 < *str2)
//		return -1;
//	else
//		return 1;
//}
//
//int main()
//{
//	char a[] = "abcdef";
//	char* p = "abcdk";
//
//	int ret = my_strcmp(a, p);
//	if (ret == 0)
//	{
//		printf("a == p\n");
//	}
//	else if (ret < 0)
//	{
//		printf("a < p\n");
//	}
//	else
//	{
//		printf("a > p\n");
//	}
//
//	return 0;
//}


//
//#include <stdio.h>
//#include <assert.h>
//
//char* my_strcat(char* dest, const char* src)
//{
//	assert(dest && src);
//
//	char* ret = dest;
//
//	while (*dest)
//	{
//		dest++;
//	}
//
//	while (*dest++ = *src++)
//	{
//		;
//	}
//
//	return ret;
//}
//
//int main()
//{
//	char a1[20] = "I lo";
//	char a2[] = "ve you!";
//
//	printf("%s\n", my_strcat(a1, a2));
//
//	return 0;
//}




//
//
//#include <stdio.h>
//#include <assert.h>
//#include <string.h>
//
//char* my_strstr(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//
//	if (*str2 == '\0')
//		return (char*)str1;
//
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	const char* cur = str1;
//
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = str2;
//
//		while (!(*s1 - *s2) && *s1 && *s2)
//		{
//			++s1;
//			++s2;
//		}
//
//		if (!(*s2))
//			return (char*)cur;
//
//		if ((int)strlen(cur) < (int)strlen(s2))
//			return NULL;
//
//		cur++;
//	}
//
//	return NULL;
//}
//
//int main()
//{
//	char a1[] = "aabbbcdef";
//	char a2[] = "bbc";
//
//	printf("%s\n", my_strstr(a1, a2));
//
//	return 0;
//}



//strncpy
//strncmp
// strncat
//
//#include <stdio.h>
//#include <assert.h>
//#include <string.h>
//
//int main()
//{
//	char a1[50] = "xxxxxx";
//	char a2[] = "abcdefabcdef";
//
//	printf("%s\n", strncpy(a1, a2, 10));
//
//	return 0;
//}



//
//#include <stdio.h>
//#include <assert.h>
//#include <string.h>
//
//char* my_strncpy(char* dest, const char* src, int n)
//{
//	assert(dest && src);
//
//	char* ret = dest;
//	int lenSrc = (int)strlen(src) + 1;
//
//	while (n--)
//	{
//		if (!lenSrc)
//		{
//			*dest++ = '\0';
//		}
//		else
//		{
//			*dest++ = *src++;
//			lenSrc--;
//		}
//	}
//
//	return ret;
//}
//
//int main()
//{
//	char a1[50] = "xxxx\0x";
//	char a2[] = "abcdefgdadada";
//
//	printf("%s\n", my_strncpy(a1, a2, 20));
//
//	return 0;
//}





// strncat

//#include <stdio.h>
//#include <assert.h>
//#include <string.h>

//int main()
//{
//	char a1[20] = "xxxx\0xxxxxxxxxxxxxx";
//	char a2[] = "abcdef";
//
//	printf("%s\n", strncat(a1, a2, 9));
//
//	return 0;
//}



////
//#include <stdio.h>
//#include <assert.h>
//#include <string.h>
//
//char* my_strncat(char* dest, const char* src, int n)
//{
//	assert(dest && src);
//
//	char* ret = dest;
//	int lenSrc = (int)strlen(src);
//
//	while (*dest)
//	{
//		dest++;
//	}
//
//	while (n--)
//	{
//		if (!lenSrc)
//		{
//			*dest++ = '\0';
//			break;
//		}
//		else
//		{
//			*dest++ = *src++;
//			lenSrc--;
//		}
//	}
//
//	if (n == 0)
//		*dest = '\0';
//
//	return ret;
//}
//
//int main()
//{
//	char a1[20] = "xxxxxxx";
//	char a2[30] = "abcdef";
//
//	printf("%s\n", my_strncat(a1, a2, 6));
//
//	return 0;
//}
////


//
//
//
//#include <stdio.h>
//#include <assert.h>
//
//int my_strncmp(const char* str1, const char* str2, int n)
//{
//	assert(str1 && str2);
//
//	while (n--)
//	{
//		if (*str1 - *str2)
//		{
//			if (*str1 < *str2)
//				return -1;
//			else
//				return 1;
//		}
//		str1++;
//		str2++;
//	}
//
//	return 0;
//}
//
//int main()
//{
//	char a1[20] = "abc";
//	char a2[] = "abcgdef";
//
//	printf("%d\n", my_strncmp(a1, a2, 3));
//	// 1:a1 > a2
//	// 0:a1 == a2
//	// -1:a1 < a2
//
//	return 0;
//}
//
//













































